<?php

/**
 * 订单基类控制器
 * 提供订单相关控制器的通用功能，如登录验证
 */

declare(strict_types=1);

namespace app\index\controller\order;

use app\common\service\Util;
use think\facade\Cookie;
use app\index\logic\users\UsersLogic;

/**
 * 订单基类控制器
 * 包含订单相关控制器共用的登录验证和用户信息管理功能
 */
class Order
{
    /**
     * 用户信息
     * @var array
     */
    protected $user_info = [];

    /**
     * 用户ID
     * @var int
     */
    protected $user_id = 0;

    /**
     * 构造函数，进行登录验证
     */
    public function __construct()
    {
        // 检查用户是否登录
        $userInfo = $this->checkLogin();
        if (!$userInfo) {
            // 未登录，返回未登录信息
            Util::ajaxReturn(0, '未登录', ['redirect' => '/user/login']);
            exit;
        }

        // 已登录，将用户信息存入属性
        $this->user_info = $userInfo;
        $this->user_id = $userInfo['id'] ?? 0;
    }

    /**
     * 检查用户登录状态
     * @return array|null 用户信息，未登录返回null
     */
    protected function checkLogin()
    {
        // 尝试从UsersLogic获取用户信息
        $userInfo = UsersLogic::getUserInfo();
        if ($userInfo) {
            return $userInfo;
        }

        // 从Cookie获取用户信息
        $userInfoCookie = Cookie::get('user_info');
        if ($userInfoCookie) {
            $userInfo = json_decode($userInfoCookie, true);
            if ($userInfo) {
                // 设置到UsersLogic中
                UsersLogic::setUserInfo($userInfo);
                UsersLogic::setUserId($userInfo['id']);
                return $userInfo;
            }
        }

        return null;
    }

    /**
     * 检查订单归属
     * @param int $orderId 订单ID
     * @param string $modelClass 模型类名
     * @return bool 订单是否属于当前用户
     */
    protected function checkOrderOwnership(int $orderId, string $modelClass): bool
    {
        $model = new $modelClass();
        $order = $model->where('id', $orderId)->where('user_id', $this->user_id)->find();
        return !empty($order);
    }
}
